package io.github.echarts.model.geometry;

/**
 * 路径片段接口
 * 表示Path中的一个组成部分，如移动、线段、曲线等
 */
public interface PathSegment {
    
    /**
     * 获取路径片段的类型
     * 
     * @return 路径片段类型
     */
    PathSegmentType getType();
    
    /**
     * 获取路径片段的SVG路径表示
     * 
     * @return SVG路径字符串
     */
    String toSvgPathData();
    
    /**
     * 计算路径片段的边界矩形
     * 
     * @param startPoint 路径的起始点（用于某些需要前一点信息的片段）
     * @return 边界矩形，如果无法计算则返回null
     */
    Rectangle getBounds(Point startPoint);
    
    /**
     * 路径片段类型枚举
     */
    enum PathSegmentType {
        /**
         * 移动到指定点
         */
        MOVE_TO,
        
        /**
         * 直线到指定点
         */
        LINE_TO,
        
        /**
         * 水平线到指定X坐标
         */
        HORIZONTAL_LINE_TO,
        
        /**
         * 垂直线到指定Y坐标
         */
        VERTICAL_LINE_TO,
        
        /**
         * 三次贝塞尔曲线到指定点
         */
        CURVE_TO,
        
        /**
         * 平滑三次贝塞尔曲线到指定点（前控制点为前一个控制点的反射）
         */
        SMOOTH_CURVE_TO,
        
        /**
         * 二次贝塞尔曲线到指定点
         */
        QUADRATIC_CURVE_TO,
        
        /**
         * 平滑二次贝塞尔曲线到指定点（控制点为前一个控制点的反射）
         */
        SMOOTH_QUADRATIC_CURVE_TO,
        
        /**
         * 弧线到指定点
         */
        ARC_TO,
        
        /**
         * 闭合路径（连接到路径的起始点）
         */
        CLOSE_PATH
    }
} 